home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1997 May / PC Plus Super CD Issue 127 (May 1997).iso / delphi2 / delphite.exe / data.z / DBGRIDS.INT < prev    next >
Encoding:
Text File  |  1996-08-12  |  11.6 KB  |  307 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,96 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBGrids;
  11.  
  12. {$R-}
  13.  
  14. interface
  15.  
  16. uses Windows, SysUtils, Messages, Classes, Controls, Forms,
  17.   Graphics, DB, DBTables, Grids, DBCtrls;
  18.  
  19. type
  20.   TColumnValue = (cvColor, cvWidth, cvFont, cvAlignment, cvReadOnly, cvTitleColor,
  21.     cvTitleCaption, cvTitleAlignment, cvTitleFont);
  22.   TColumnValues = set of TColumnValue;
  23.  
  24. const
  25.   ColumnTitleValues = [cvTitleColor..cvTitleFont];
  26.   cm_DeferLayout = WM_USER + 100;
  27.  
  28. { TColumn defines internal storage for column attributes.  Values assigned
  29.   to properties are stored in this object, the grid- or field-based default
  30.   sources are not modified.  Values read from properties are the previously
  31.   assigned value, if any, or the grid- or field-based default values if
  32.   nothing has been assigned to that property. This class also publishes the
  33.   column attribute properties for persistent storage.  }
  34. type
  35.   TColumn = class;
  36.   TCustomDBGrid = class;
  37.  
  38.   TColumnTitle = class(TPersistent)
  39.   protected
  40.     procedure RefreshDefaultFont;
  41.   public
  42.     constructor Create(Column: TColumn);
  43.     destructor Destroy; override;
  44.     procedure Assign(Source: TPersistent); override;
  45.     function DefaultAlignment: TAlignment;
  46.     function DefaultColor: TColor;
  47.     function DefaultFont: TFont;
  48.     function DefaultCaption: string;
  49.     procedure RestoreDefaults; virtual;
  50.   published
  51.     property Alignment: TAlignment;
  52.     property Caption: string;
  53.     property Color: TColor;
  54.     property Font: TFont;
  55.   end;
  56.  
  57.   TColumnButtonStyle = (cbsAuto, cbsEllipsis, cbsNone);
  58.  
  59.   TColumn = class(TCollectionItem)
  60.   protected
  61.     function  CreateTitle: TColumnTitle; virtual;
  62.     function  GetGrid: TCustomDBGrid;
  63.     procedure RefreshDefaultFont;
  64.   public
  65.     constructor Create(Collection: TCollection); override;
  66.     destructor Destroy; override;
  67.     procedure Assign(Source: TPersistent); override;
  68.     function  DefaultAlignment: TAlignment;
  69.     function  DefaultColor: TColor;
  70.     function  DefaultFont: TFont;
  71.     function  DefaultReadOnly: Boolean;
  72.     function  DefaultWidth: Integer;
  73.     procedure RestoreDefaults; virtual;
  74.     property  AssignedValues: TColumnValues;
  75.     property  Field: TField;
  76.   published
  77.     property  Alignment: TAlignment;
  78.     property  ButtonStyle: TColumnButtonStyle default cbsAuto;
  79.     property  Color: TColor;
  80.     property  DropDownRows: Integer default 7;
  81.     property  FieldName: String;
  82.     property  Font: TFont;
  83.     property  PickList: TStrings;
  84.     property  ReadOnly: Boolean;
  85.     property  Title: TColumnTitle;
  86.     property  Width: Integer;
  87.   end;
  88.  
  89.   TColumnClass = class of TColumn;
  90.  
  91.   TDBGridColumnsState = (csDefault, csCustomized);
  92.  
  93.   TDBGridColumns = class(TCollection)
  94.   protected
  95.     procedure Update(Item: TCollectionItem); override;
  96.   public
  97.     constructor Create(Grid: TCustomDBGrid; ColumnClass: TColumnClass);
  98.     function  Add: TColumn;
  99.     procedure RestoreDefaults;
  100.     procedure RebuildColumns;
  101.     property State: TDBGridColumnsState;
  102.     property Grid: TCustomDBGrid;
  103.     property Items[Index: Integer]: TColumn; default;
  104.   end;
  105.  
  106.   TGridDataLink = class(TDataLink)
  107.   protected
  108.     procedure ActiveChanged; override;
  109.     procedure DataSetChanged; override;
  110.     procedure DataSetScrolled(Distance: Integer); override;
  111.     procedure FocusControl(Field: TFieldRef); override;
  112.     procedure EditingChanged; override;
  113.     procedure LayoutChanged; override;
  114.     procedure RecordChanged(Field: TField); override;
  115.     procedure UpdateData; override;
  116.     function  GetMappedIndex(ColIndex: Integer): Integer;
  117.   public
  118.     constructor Create(AGrid: TCustomDBGrid);
  119.     destructor Destroy; override;
  120.     function AddMapping(const FieldName: string): Boolean;
  121.     procedure ClearMapping;
  122.     procedure Modified;
  123.     procedure Reset;
  124.     property DefaultFields: Boolean;
  125.     property FieldCount: Integer;
  126.     property Fields[I: Integer]: TField;
  127.     property SparseMap: Boolean;
  128.   end;
  129.  
  130.   TBookmarkList = class
  131.   protected
  132.     function CurrentRow: TBookmarkStr;  // shortcut to grid.datasource...
  133.     function Compare(const Item1, Item2: TBookmarkStr): Integer;
  134.     procedure LinkActive(Value: Boolean);
  135.   public
  136.     constructor Create(AGrid: TCustomDBGrid);
  137.     destructor Destroy; override;
  138.     procedure Clear;           // free all bookmarks
  139.     procedure Delete;          // delete all selected rows from dataset
  140.     function  Find(const Item: TBookmarkStr; var Index: Integer): Boolean;
  141.     function  IndexOf(const Item: TBookmarkStr): Integer;
  142.     function  Refresh: Boolean;// drop orphaned bookmarks; True = orphans found
  143.     property Count: Integer;
  144.     property CurrentRowSelected: Boolean;
  145.     property Items[Index: Integer]: TBookmarkStr; default;
  146.   end;
  147.  
  148.   TDBGridOption = (dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator,
  149.     dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,
  150.     dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect);
  151.   TDBGridOptions = set of TDBGridOption;
  152.  
  153.   { The DBGrid's DrawDataCell virtual method and OnDrawDataCell event are only
  154.     called when the grid's Columns.State is csDefault.  This is for compatibility
  155.     with existing code. These routines don't provide sufficient information to
  156.     determine which column is being drawn, so the column attributes aren't
  157.     easily accessible in these routines.  Column attributes also introduce the
  158.     possibility that a column's field may be nil, which would break existing
  159.     DrawDataCell code.   DrawDataCell, OnDrawDataCell, and DefaultDrawDataCell
  160.     are obsolete, retained for compatibility purposes. }
  161.   TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField;
  162.     State: TGridDrawState) of object;
  163.  
  164.   { The DBGrid's DrawColumnCell virtual method and OnDrawColumnCell event are
  165.     always called, when the grid has defined column attributes as well as when
  166.     it is in default mode.  These new routines provide the additional
  167.     information needed to access the column attributes for the cell being
  168.     drawn, and must support nil fields.  }
  169.  
  170.   TDrawColumnCellEvent = procedure (Sender: TObject; const Rect: TRect;
  171.     DataCol: Integer; Column: TColumn; State: TGridDrawState) of object;
  172.  
  173.   TCustomDBGrid = class(TCustomGrid)
  174.   protected
  175.     FUpdateFields: Boolean;
  176.     FAcquireFocus: Boolean;
  177.     function  RawToDataColumn(ACol: Integer): Integer;
  178.     function  DataToRawColumn(ACol: Integer): Integer;
  179.     function  AcquireLayoutLock: Boolean;
  180.     procedure BeginLayout;
  181.     procedure BeginUpdate;
  182.     procedure CancelLayout;
  183.     function  CanEditAcceptKey(Key: Char): Boolean; override;
  184.     function  CanEditModify: Boolean; override;
  185.     function  CanEditShow: Boolean; override;
  186.     procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
  187.     procedure ColEnter; dynamic;
  188.     procedure ColExit; dynamic;
  189.     procedure ColWidthsChanged; override;
  190.     function  CreateColumns: TDBGridColumns; dynamic;
  191.     function  CreateEditor: TInplaceEdit; override;
  192.     procedure CreateWnd; override;
  193.     procedure DeferLayout;
  194.     procedure DefineFieldMap; virtual;
  195.     procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  196.     procedure DrawDataCell(const Rect: TRect; Field: TField;
  197.       State: TGridDrawState); dynamic; { obsolete }
  198.     procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
  199.       Column: TColumn; State: TGridDrawState); dynamic;
  200.     procedure EditButtonClick; dynamic;
  201.     procedure EndLayout;
  202.     procedure EndUpdate;
  203.     function  GetColField(DataCol: Integer): TField;
  204.     function  GetEditLimit: Integer; override;
  205.     function  GetEditMask(ACol, ARow: Longint): string; override;
  206.     function  GetEditText(ACol, ARow: Longint): string; override;
  207.     function  GetFieldValue(ACol: Integer): string;
  208.     function  HighlightCell(DataCol, DataRow: Integer; const Value: string;
  209.       AState: TGridDrawState): Boolean; virtual;
  210.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  211.     procedure KeyPress(var Key: Char); override;
  212.     procedure LayoutChanged; virtual;
  213.     procedure LinkActive(Value: Boolean); virtual;
  214.     procedure Loaded; override;
  215.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  216.       X, Y: Integer); override;
  217.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  218.     procedure Scroll(Distance: Integer); virtual;
  219.     procedure SetColumnAttributes; virtual;
  220.     procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
  221.     function  StoreColumns: Boolean;
  222.     procedure TimedScroll(Direction: TGridScrollDirection); override;
  223.     property Columns: TDBGridColumns;
  224.     property DefaultDrawing: Boolean default True;
  225.     property DataSource: TDataSource;
  226.     property DataLink: TGridDataLink;
  227.     property IndicatorOffset: Byte;
  228.     property LayoutLock: Byte;
  229.     property Options: TDBGridOptions default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
  230.     property ParentColor default False;
  231.     property ReadOnly: Boolean default False;
  232.     property SelectedRows: TBookmarkList;
  233.     property TitleFont: TFont;
  234.     property UpdateLock: Byte;
  235.     property OnColEnter: TNotifyEvent;
  236.     property OnColExit: TNotifyEvent;
  237.     property OnDrawDataCell: TDrawDataCellEvent; { obsolete }
  238.     property OnDrawColumnCell: TDrawColumnCellEvent;
  239.     property OnEditButtonClick: TNotifyEvent;
  240.     property OnColumnMoved: TMovedEvent;
  241.   public
  242.     constructor Create(AOwner: TComponent); override;
  243.     destructor Destroy; override;
  244.     procedure DefaultDrawDataCell(const Rect: TRect; Field: TField;
  245.       State: TGridDrawState); { obsolete }
  246.     procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
  247.       Column: TColumn; State: TGridDrawState);
  248.     function ValidFieldIndex(FieldIndex: Integer): Boolean;
  249.     property EditorMode;
  250.     property FieldCount: Integer;
  251.     property Fields[FieldIndex: Integer]: TField;
  252.     property SelectedField: TField;
  253.     property SelectedIndex: Integer;
  254.   end;
  255.  
  256.   TDBGrid = class(TCustomDBGrid)
  257.   public
  258.     property Canvas;
  259.     property SelectedRows;
  260.   published
  261.     property Align;
  262.     property BorderStyle;
  263.     property Color;
  264.     property Columns stored StoreColumns;
  265.     property Ctl3D;
  266.     property DataSource;
  267.     property DefaultDrawing;
  268.     property DragCursor;
  269.     property DragMode;
  270.     property Enabled;
  271.     property FixedColor;
  272.     property Font;
  273.     property Options;
  274.     property ParentColor;
  275.     property ParentCtl3D;
  276.     property ParentFont;
  277.     property ParentShowHint;
  278.     property PopupMenu;
  279.     property ReadOnly;
  280.     property ShowHint;
  281.     property TabOrder;
  282.     property TabStop;
  283.     property TitleFont;
  284.     property Visible;
  285.     property OnColEnter;
  286.     property OnColExit;
  287.     property OnColumnMoved;
  288.     property OnDrawDataCell;  { obsolete }
  289.     property OnDrawColumnCell;
  290.     property OnDblClick;
  291.     property OnDragDrop;
  292.     property OnDragOver;
  293.     property OnEditButtonClick;
  294.     property OnEndDrag;
  295.     property OnEnter;
  296.     property OnExit;
  297.     property OnKeyDown;
  298.     property OnKeyPress;
  299.     property OnKeyUp;
  300.     property OnStartDrag;
  301.   end;
  302.  
  303. const
  304.   IndicatorWidth = 11;
  305.  
  306. implementation
  307.